Network packet schedulers are used for regulating & prioritizing network traffic. On a node in packet switching communication network, a network scheduler is an arbiter program that manages the sequence of network packets in the transmit and receive queues of the network interface controller, which acts as a buffer. A network packet scheduler decides which network packet to send next from the buffer. The buffer space may be divided into different queues, with each of them holding the packets of one flow according to configured packet classification rules; for example, packets can be divided into flows by their source and destination IP addresses.
Network scheduling algorithms and their associated settings determine how the network scheduler manages the buffer. There are numerous algorithms used for network packet scheduling, such as Adaptive Virtual Queueing, Class-based Queueing, Credit-based Fair Queueing, Deficit Round Robin, Hierarchical Fair-Service, Hierarchical Token Bucket, Fair Queueing, Weighted Fair Queuing, Hierarchical Weighted Fair Queuing, etc. Most of these algorithms use expensive heap/sort operations to prioritize network traffic. These operations make network packet scheduling a very high CPU intensive work. Since none of the network packet scheduling algorithms are designed to work in a parallel fashion, instantiating multiple packet schedulers causes problems, if more than one instance are sending packets towards the same bottleneck link.